package com.gy.controller.assistant.tools;

import com.gy.entity.result.Patents;
import com.gy.service.PatentsService;
import com.gy.controller.common.UserHolder;
import com.gy.result.Result;
import dev.langchain4j.agent.tool.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

@Component
public class PatentTool {

    @Autowired
    private PatentsService patentsService;

    /**
     * AI调用的“新增专利”工具
     * @param title 专利名称（必填）
     * @param patentType 专利类型（必填，如发明专利、实用新型专利）
     * @param applicationNumber 专利申请号（必填）
     * @param applicationDate 申请日期（必填，格式：yyyy-MM-dd）
     * @param patentOwner 专利权人（必填）
     * @param pdfUrl 专利PDF链接（可选）
     * @param remarks 备注（可选）
     * @return 新增结果
     */
    @Tool(
            name = "新增专利工具",
            value = "用于帮用户新增专利信息到系统，必须传入所有必填参数才能调用"
    )
    public String addPatent(
            String title,
            String patentType,
            String applicationNumber,
            String applicationDate,
            String patentOwner,
            String pdfUrl,
            String remarks) {
        try {
            // 1. 构建Patents实体（与现有Mapper的字段对应，如pdfPath）
            Patents patents = new Patents();
            patents.setTitle(title);
            patents.setPatentType(patentType);
            patents.setApplicationNumber(applicationNumber);
            // 日期格式转换（确保与数据库字段类型一致，复用现有Service的格式处理）
            patents.setApplicationDate(java.sql.Timestamp.valueOf(LocalDate.parse(applicationDate, DateTimeFormatter.ISO_LOCAL_DATE).atStartOfDay()));
            patents.setPatentOwner(patentOwner);
            patents.setPdfPath(pdfUrl); // 对应Mapper中的pdf_url字段
            patents.setRemarks(remarks);
            // 2. 注入当前用户ID
            patents.setUserId(UserHolder.getUser().getUserId());
            // 3. 调用已有Service方法（复用事务和校验）
            Result result = patentsService.savePatent(patents);
            // 4. 转换为自然语言结果
            return result.getCode() == 1 ?
                    "专利新增成功！名称：" + title + "，申请号：" + applicationNumber :
                    "专利新增失败：" + result.getMsg();
        } catch (DateTimeParseException e) {
            return "申请日期格式错误，请使用yyyy-MM-dd格式（例如2024-05-20）";
        } catch (Exception e) {
            // 注意：log 需要定义或使用 slf4j 等日志框架
            // 示例：private static final Logger log = LoggerFactory.getLogger(PatentTool.class);
            return "新增专利时发生系统错误，请稍后再试";
        }
    }
}
